﻿using Enterprises.Wpf.Core.Entity;

namespace Enterprises.Wpf.Core.Net
{
    /// <summary>
    /// 用于读写的设备接口，相较于IReadWriteNet，增加ReadFromCoreServer相关的方法，可以用来和设备进行额外的交互。
    /// </summary>
    public interface IReadWriteDevice : IReadWriteNet
    {
        /// <summary>
        /// 将当前的数据报文发送到设备去，具体使用什么通信方式取决于设备信息，然后从设备接收数据回来，并返回给调用者。
        /// </summary>
        /// <param name="send">发送的完整的报文信息</param>
        /// <returns>接收的完整的报文信息</returns>
        /// <remarks>
        /// 本方法用于实现本组件还未实现的一些报文功能，例如有些modbus服务器会有一些特殊的功能码支持，需要收发特殊的报文，详细请看示例
        /// </remarks>
        OperateResult<byte[]> ReadFromCoreServer(byte[] send);

        /// <summary>
        /// 将多个数据报文按顺序发到设备，并从设备接收返回的数据内容，然后拼接成一个Byte[]信息，需要重写方法才能返回正确的结果。<br />
        /// Send multiple data packets to the device in sequence, and receive the returned data content from the device, and then splicing them into a Byte[] message, 
        /// </summary>
        /// <param name="send">发送的报文列表信息</param>
        /// <returns>是否接收成功</returns>
        OperateResult<byte[]> ReadFromCoreServer(IEnumerable<byte[]> send);

        Task<OperateResult<byte[]>> ReadFromCoreServerAsync(byte[] send);

        Task<OperateResult<byte[]>> ReadFromCoreServerAsync(IEnumerable<byte[]> send);
    }

}
